package com.gameShare.service.misc

import com.gameShare.constances.ExpireTime
import com.gameShare.constances.RedisKeys
import com.gameShare.entity.dto.user.UserBaseInfoDto
import com.gameShare.utils.RedisUtils
import org.springframework.stereotype.Service

@Service("redisService")
class RedisService(private val redisUtils: RedisUtils) {


    /**
     * 保存用户信息用token作为键 过期时间为7天
     *
     * @param token 用户令牌
     * @param userInfo 用户信息
     */
    fun saveUserTokenInfo(token: String, userInfo: UserBaseInfoDto) {
        redisUtils.saveSerializableObject(RedisKeys.LOGIN_TOKEN + token, userInfo, ExpireTime.LONG_SEC_ONE_DAY * 7)
    }

    /**
     * 获取用户信息通过token
     *
     * @param token 用户token
     * @return
     */
    fun getUserTokenInfo(token : String): UserBaseInfoDto? {
        return redisUtils.getSerializableObject(RedisKeys.LOGIN_TOKEN + token, UserBaseInfoDto::class.java)
    }

    fun delUserTokenInfo(token : String){
        return redisUtils.del(RedisKeys.LOGIN_TOKEN + token)
    }

    /**
     * 保存验证码图片数据到redis中
     *
     * @param id 图片id
     * @param imageData 图片数据
     */
    fun saveCaptchaImage(id : String, imageData : String){
        redisUtils.set(RedisKeys.CAPTCHA_IMG + id  , imageData)
    }

    /**
     * 保存生成的验证码答案到redis中
     *
     * @param key 验证码key
     * @param captchaAnswerDto 验证码答案对象
     */
    fun saveCaptchaAnswer(key : String, correctIndices : List<Int>){
        redisUtils.saveSerializableObject(RedisKeys.CAPTCHA_ANSWER + key, correctIndices, ExpireTime.LONG_SEC_CAPTCHA)
    }

    /**
     * 获取验证码图片
     *
     * @param id 验证码图片id
     * @return 验证码图片数据
     */
    fun getCaptchaImage(id : String) : String? {
        return redisUtils.get(RedisKeys.CAPTCHA_IMG + id)
    }

    /**
     * 删除验证码答案
     *
     * @param key 验证码key
     */
    fun delCaptchaAnswer(key : String){
        redisUtils.del(RedisKeys.CAPTCHA_ANSWER + key)
    }

    /**
     * 获取验证码答案
     *
     * @param key 答案key
     * @return
     */
    fun getCaptchaAnswer(key: String): List<Int>? {
        return redisUtils.getSerializableObject(
            RedisKeys.CAPTCHA_ANSWER + key,
            List::class.java
        ) as? List<Int>
    }

}